Grundkurs SQL

2.2  Warum Tabellen verbinden?

Wie wir wissen, hat eine gewöhnliche SQL-Abfrage meist die Form: SELECT ... FROM ... WHERE ... 

Ausgehend von der Grundform einer SQL-Abfrage wollen wir uns die gleichzeitige Abfrage mehrerer Tabellen ansehen. Zuvor aber noch kurz ein wenig Theorie.

Es ist manchmal sinnvoll, Informationen zu einem Objekt (Entität) in verschiedenen Tabellen zu speichern. Beispielsweise speichern wir nicht die Daten der Abteilungen in der Tabelle der Mitarbeiter. Sonst würden die gesamten Informationen zu den Abteilungen bei jedem Mitarbeiter abgespeichert werden. Änderungen werden somit sehr zeitaufwändig und unübersichtlich – leicht werden Änderungen in einzelnen Einträgen vergessen. Das verhindert man, indem eine eigene Tabelle für die Abteilungen existiert, in der jede Abteilung genau einmal vorkommt.

Um zu wissen, welcher Mitarbeiter nun in welcher Abteilung arbeitet, besitzt jeder Mitarbeiter ein extra Attribut (abteilung_id), welches auf die entsprechende Abteilung in der Abteilungstabelle verweist. Das Attribut ist daher der Fremdschlüssel für die Abteilungen und darf beliebig oft in der Mitarbeitertabelle vorkommen.

Das entsprechende Gegenstück ist bei der Abteilungstabelle der Primärschlüssel, da dieses Attribut dort nur einmal vorkommen darf. Dieses Attribut hat denselben Namen (abteilung_ID). Es kann aber auch beim Datenbankdesign einen beliebigen anderen Spaltennamen eingesetzt werden. Man sollte nur wissen, dass es in einer anderen Tabelle eine Beziehung dazu gibt.

Wie suche ich Informationen aus verschiedenen Tabellen ohne Computer?

Möchte ich nun wissen, in welcher Abteilung ein bestimmter Mitarbeiter arbeitet, reicht es nicht, in der Mitarbeitertabelle die Abteilungsnummer zu suchen, man muss zusätzlich mit dieser Nummer in der Abteilungstabelle den Abteilungsnamen herausfiltern. Somit brauche ich zwei Attribute (Abteilungsnummer und Abteilungsnamen) aus verschiedenen Tabellen. Genau hier kommt nun unsere gleichzeitige Abfrage mehrerer Tabellen zum Einsatz.

Sie können sich sicher vorstellen, wie man ohne Computer vorgehen würde. Zuerst schaut man in die Tabelle der Mitarbeiter (tbl_mitarbeiter) und greift sich den gewünschten Namen heraus.
In der Spalte abteilung_id der Zeile des Suchergebnisses findet man eine Zahl. Man schaut nun in die Tabelle Abteilungen (tbl_abteilung) und sucht in der Spalte, die ebenfalls abteilung_id heißt, nach der eben gefundenen Zahl. Ist sie vorhanden, verfolgt man die Zeile bis zur Spalte mit dem Abteilungsnamen (abteilungsname) und findet hier den Namen der gesuchten Abteilung.

 

Schauen Sie sich wiederholt das Datenbankschema der Beispieldatenbank an (Personaldatenbank) um das genannte Beispiel gedanklich zu verfolgen. Im nächsten Abschnitt werden wir dann praktisch arbeiten.